home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / dockob / mine5.kob < prev    next >
Text File  |  1997-06-06  |  5KB  |  226 lines

  1. /**************************************
  2. /* 一瞬マインスイーパー  by v914AKSTN *
  3. /**************************************
  4.  
  5. dim char map( 22*22-1 )
  6. dim char suji( 22*22-1 )
  7. dim int v(7)={ -22-1, -22, -22+1, -1, 1, 22-1, 22, 22+1 }
  8. dim int m_palet(15)={
  9.     &h4000,&h8000,&hFDAC,&h32,&h4A52,&h6C0,&hDE80,&hB832,
  10.     &h87AC,&hF9CE,&h5BC,&hAF48,&hA000,&hFFFE,&h43D0,&h294A
  11. }
  12. dim char m_pat(3071)    /* グラフィックパターン
  13.  
  14. dim int work(22*22-1)
  15. int i,x
  16. int N=50    /* 爆弾の個数
  17. int r,rm
  18. int flag=2
  19. int starttime,endtime
  20. int t_wno    /* テンポラリのウインドウNo(by 電脳魔術団)
  21.  
  22.  
  23.     /* グラフィックデータ読み込み
  24. i=fopen( left$( b_argv(0), strrchr( b_argv(0), '\' )+1 )+"mine5.pat", "r" )
  25. fread( m_pat, 3072, i )
  26. fclose( i )
  27.  
  28.     /* オープン
  29. t_wno = WindowTitleOpen( 0, WINX, WINY, 16*20, 16*20, 0, "一瞬マインスイーパー", 3 )
  30. WindowTitleOpen( 1, WINX+16*20+4, WINY, 120, 72, 0, "一瞬マイン", 2 )
  31. GraphicInit( 0, 16, m_palet )
  32. WindowRedraw(t_wno)    /*(by 電脳魔術団)
  33.  
  34. end    /* 初期化処理の終わり
  35.  
  36.  
  37.  
  38. /************************
  39. /* マウスが押されたら→ *
  40. /************************
  41. func Emouse( wno )
  42.     int i,j,s,x
  43.     int w1,w2
  44.  
  45.     if wno=1 then {
  46.         if flag then {
  47.             flag=2
  48.             WindowRedraw(0)
  49.             WindowRedraw(1)
  50.             return(1)
  51.         }
  52.         return(0)
  53.     }
  54.     if flag then return(0)
  55.  
  56.     /* 場所計算(マウスカーソル位置からパネルを割り出す)
  57.     x=(info_x\16)+1 + ( (info_y\16)+1 )*22
  58.  
  59.     /*もう開いてる→    何もしない
  60.     if suji(x)<=8 then return(1)
  61.  
  62.     /*左ボタンだ!→
  63.     if info_Lon then {
  64.         if suji(x)>9 then return(1)    /* 爆弾マークは開けない
  65.  
  66.         /*爆弾がある→    どかん! 終わり
  67.         if map(x) then {
  68.             for x=0 to 22*22-1
  69.                 if map(x) and suji(x)=9 then suji(x)=11
  70.             next
  71.             WindowRedraw( 0 )
  72.             ITIME=-1
  73.             flag=1        /* ゲーム終了
  74.         /*爆弾がない→    まわりの爆弾の個数計算、表示
  75.         } else {
  76.             w1=1:w2=0
  77.             work(0)=x
  78.             while w1<>w2
  79.                 x=work(w2):w2=w2+1
  80.                 s=0
  81.                 for i=0 to 7
  82.                     s=s+map(x+v(i))
  83.                 next
  84.                 suji(x)=s    /* 空白・数字
  85.                 m_put( x )
  86.                 r=r-1
  87.                 if s=0 then {    /* 空白の周り登録
  88.                     for i=0 to 7
  89.                         if suji(x+v(i))=9 then {
  90.                             suji(x+v(i))=0
  91.                             work(w1)=x+v(i):w1=w1+1
  92.                         }
  93.                     next
  94.                 }
  95.             endwhile
  96.             print_panel()
  97.             if r=rm then {        /* ゲーム終了!
  98.                 flag=1:ITIME=-1
  99.                 DrawSymbol( 0, 58,  148, " Congraturation! ", 9, 24 )
  100.             }
  101.         }
  102.  
  103.     /*うんにゃ、右ボタンだ!→
  104.     } else if info_Ron then {
  105.         /*開いてないパネル→    爆弾マークを表示
  106.         if suji(x)=9 then {
  107.             suji(x)=10    /* 爆弾マーク@
  108.             m_put(x)
  109.             r=r-1
  110.             rm=rm-1
  111.             print_panel()
  112.         /*爆弾マーク→        開いてないパネルを表示
  113.         } else if suji(x)=10 then {
  114.             suji(x)=9    /* まだ開いてない
  115.             m_put(x)
  116.             r=r+1
  117.             rm=rm+1
  118.             print_panel()
  119.         }
  120.     }
  121.  
  122. endfunc
  123.  
  124.  
  125.  
  126. /**********
  127. /* 再描画 *
  128. /**********
  129. func Eredraw( wno )
  130.     int i,j
  131.     int h1,v1
  132.  
  133.     if flag=2 then field_init()    /* ゲームスタート!
  134.  
  135.     switch wno
  136.     case 0:
  137.         DrawClear( wno, 2 )    /* Graphic
  138.         h1=(info_x+info_h)/16    /* 書き直し範囲
  139.         v1=(info_y+info_v)/16
  140.         for j=info_y/16 to v1
  141.             for i=info_x/16 to h1
  142.                 DrawGraphicPut( wno, (i-1)*16, (j-1)*16, (i-1)*16+15, (j-1)*16+15, m_pat, suji( i+j*22 )*256 )
  143.             next
  144.         next
  145.         break
  146.  
  147.     case 1:
  148.         DrawClear( wno, 1 )
  149.         i=(endtime-starttime)/100
  150.         print_panel()
  151.         DrawSymbol( wno, 8, 48, " 時間  : "+right$("  "+itoa(i),3) )
  152.     endswitch
  153.  
  154. endfunc
  155.  
  156.  
  157.  
  158. /*******************
  159. /* 1秒毎の呼びだし *
  160. /*******************
  161. func Einterval( wno )
  162.     int i
  163.  
  164.     endtime=IntervalTime()
  165.     i=(endtime-starttime)/100
  166.     DrawSymbol( 1, 8, 48, " 時間  : "+right$("  "+itoa(i),3) )
  167. endfunc
  168.  
  169.  
  170.  
  171. /************
  172. /* 各種サブ *
  173. /************
  174.  
  175.  
  176.     /* パーツ描画
  177. func m_put( x )
  178.     int x0,y0
  179.     x0=((x mod 22)-1)*16
  180.     y0=(x\22-1)*16
  181.     DrawGraphicPut( 0, x0, y0, x0+15, y0+15, m_pat, suji(x)*256 )
  182. endfunc
  183.  
  184.  
  185.     /* 残りパネル&爆弾数表示
  186. func print_panel()
  187.     DrawSymbol( 1, 8,  8, "パネル : "+right$("  "+itoa(r),3) )
  188.     DrawSymbol( 1, 8, 28, " 爆弾  : "+right$("  "+itoa(rm),3) )
  189. endfunc
  190.  
  191.  
  192.     /* フィールド初期化
  193. func field_init()
  194.     int i,j,x
  195.  
  196.     for i=0 to 22*22-1
  197.         map(i)=0    /* 爆弾無し
  198.         suji(i)=9    /* まだ開いてないパネル
  199.     next
  200.     for i=0 to 22-1
  201.         suji(i)=0:suji(i+21*22)=0    /* 周囲を開いていることにする
  202.         suji(i*22)=0:suji(i*22+21)=0    /* 自動開き用の番人
  203.     next
  204.     for i=1 to N        /* 爆弾 N 個を散らす
  205.         repeat
  206.             x=int(rnd()*20)+1 + (int(rnd()*20)+1)*22    /* ランダムな位置
  207.         until map(x)=0    /* 爆弾の無いところを探して
  208.         map(x)=1    /* 爆弾を置く
  209.     next
  210.  
  211.     r=20*20        /* 残りパネル
  212.     rm=N        /* 残り爆弾
  213.     flag=0        /* 1 になったらゲーム終了
  214.  
  215.     starttime=IntervalTime()
  216.     endtime=starttime
  217.     ITIME=100
  218. endfunc
  219.  
  220.  
  221.  
  222. /*******************
  223. /* 終わり  H8/2/14 *
  224. /*******************
  225.  
  226.